자바,정규식과 replace() :: 자주 쓰이는 메소드및 API 를 정리합니다.[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

자주 쓰이는 메소드및 API 를 정리합니다.
[1]
등록일:2008-03-09 15:29:28 (0%)
작성자:
제목:자바,정규식과 replace()
자바초보입니다.  
String  클래스를  살펴보다가  정규식이란걸  어제  처음  알았는데요.  

replaceAll  메서드를  사용할때  정규식을  이용하는데  
예를들어,

"23123()asdawe()",  "2311111()asdwq()".....
이런  문자열이  있을때  문자  다음에  오는  괄호는  그대로  두고  숫자  다음에  오는  괄호만  다른  문자로  바꾸려면  어떻게  해야  하나요?

"23123**asdawe()",  "2311111**asdwq()".....  
가급적  쉽게  가르쳐  주시면  감사하겠습니다.

-------------------------------------------------------------------------------------------------
정규식은...  Java  API보시고  이리저리만들어보는  수  밖에  없습니다.

  

일단  질문하신  내용의  예제를  알려드릴께요.

  

설명할게  너무  많기  때문에...  적절한  수준에서  정리했습니다.

  

  

import  java.util.regex.*;              //  Pattern과  Matcher가  속한  패키지

class  RegularEx5
{
            public  static  void  main(String[]  args)
            {
                        String  source  =  "23123()asdawe()23123()asdawe()23123()asdawe()";
                        String  pattern  =  "\\d+\\(\\)";                          //  숫자(\\d)뒤에오는  괄호를  패턴으로  지정

                        //    \d는  숫자를  의미하며  +는  하나이상의  숫자가  있어야함을  의미

                      //  괄호는  예약문자(?)이므로  \\를  앞에  붙여줘야  괄호로  인식

                      //    괄호앞에  \\를  붙이지  않으면  그룹화문자로  인식한다.

                    //    \를  \\와  같이  두개씩  쓰는  이유는  문자열  내에서  \를  표현하려면  두개  써줘야하기  때문
                        StringBuffer  sb  =  new  StringBuffer();

                        Pattern  p  =  Pattern.compile(pattern);
                        Matcher  m  =  p.matcher(source);

                        System.out.println("source:"+source);

                        int  i=0;
                        while(m.find())  {

                                  //  지정한  패턴과  매칭되는  부분을  치환한다.  마지막  두글자인  괄호를  잘라내고

                                //  원하는  문자(@@)로  바꾼다.

                                //  find()를  통해서  패턴과  일치하는  부분은  m.group()을  통해서  얻는다.
                                    m.appendReplacement(sb,  m.group().substring(0,  m.group().length()-2)+"@@");
                        }

                        m.appendTail(sb);
                        System.out.println("result:"+sb.toString());
            }
}

/*
source:23123()asdawe()23123()asdawe()23123()asdawe()
result:23123@@asdawe()23123@@asdawe()23123@@asdawe()
*/

  

숫자뒤에오는  ()를  @@로  바꾼겁니다.

  

  

[예제2]  -  다양한  정규식활용예

import  java.util.regex.*;                  //  Pattern과  Matcher가  속한  패키지

  

class  RegularEx2

{

                  public  static  void  main(String[]  args)

                  {

                                    String[]  data  =  {"bat",  "baby",  "bonus",  "c",  "cA",

                                                                                                            "ca",  "co",  "c.",  "c0",  "c#",

                                                                                                            "car","combat","count",  "date",  "disc"

                                                                                                            };                                  

                                    String[]  pattern  =  {".*","c[a-z]*","c[a-z]",  "c[a-zA-Z]",  "c[a-zA-Z0-9]",

                                                                                                                              "c.","c.*","c\\.","c\\w","c\\d","c.*t",                  "[b|c].*",

                                                                                                                              ".*a.*",  ".*a.+",  "[b|c].{2}"

                                                                                                                              };

  

                                    for(int  x=0;  x  <  pattern.length;  x++)  {

                                                      Pattern  p  =  Pattern.compile(pattern[x]);

                                                      System.out.print("Pattern  :  "  +  pattern[x]  +  "    결과:  ");

                                                      for(int  i=0;  i  <  data.length;  i++)  {

                                                                        Matcher  m  =  p.matcher(data[i]);

                                                                        if(m.matches())

                                                                                          System.out.print(data[i]  +  ",");

                                                      }

                                                      System.out.println();

                                    }

                  }  //  public  static  void  main(String[]  args)

}

  

/*

Pattern  :  .*    결과:  bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,date,disc,

Pattern  :  c[a-z]*    결과:  c,ca,co,car,combat,count,

Pattern  :  c[a-z]    결과:  ca,co,

Pattern  :  c[a-zA-Z]    결과:  cA,ca,co,

Pattern  :  c[a-zA-Z0-9]    결과:  cA,ca,co,c0,

Pattern  :  c.    결과:  cA,ca,co,c.,c0,c#,

Pattern  :  c.*    결과:  c,cA,ca,co,c.,c0,c#,car,combat,count,

Pattern  :  c\.    결과:  c.,

Pattern  :  c\w    결과:  cA,ca,co,c0,

Pattern  :  c\d    결과:  c0,

Pattern  :  c.*t    결과:  combat,count,

Pattern  :  [b|c].*    결과:  bat,baby,bonus,c,cA,ca,co,c.,c0,c#,car,combat,count,

Pattern  :  .*a.*    결과:  bat,baby,ca,car,combat,date,

Pattern  :  .*a.+    결과:  bat,baby,car,combat,date,

Pattern  :  [b|c].{2}    결과:  bat,car,

*/
출처  :  http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10106&eid=0QxOJXo6uahWgsod6hG8NohBwwCOxmr8
&qb=wNq52SBtYXRjaGVy
[본문링크] 자바,정규식과 replace()
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=2421
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.